/**
 * 返回防抖处理后的函数，可以携带参数
 * @param func 要处理的函数
 * @param delayTime 延迟时间
 * @returns 防抖处理后的函数
 */
export function debounce(func, delayTime) {
	// 设置定时器，到点状态为空
	let timer = null;
	return function(...args) {
		// 如果触发事件时，定时器未到点，清空原来的定时器
		if (timer) clearTimeout(timer);
		// 重新设置定时器，到点执行函数
		timer = setTimeout(() => func.apply(this, args), delayTime || 500);
	};
}

/**
 * 节流原理：在一定时间内，只能触发一次
 * @param {Function} func 要执行的回调函数
 * @param {Number} wait 延时的时间
 * @param {Boolean} immediate 是否立即执行
 * @return null
 */
export function throttle(func, wait = 500, immediate = true) {
	let timer;
	let flag
	return function(...args) {
		if (immediate) {
			if (!flag) {
				flag = true
				// 如果是立即执行，则在wait毫秒内开始时执行
				typeof func === 'function' && func()
				timer = setTimeout(() => {
					flag = false
				}, wait)
			}
		} else if (!flag) {
			flag = true
			// 如果是非立即执行，则在wait毫秒内的结束处执行
			timer = setTimeout(() => {
				flag = false
				typeof func === 'function' && func()
			}, wait)
		}
	}
}
export const dateformat = (timestamp) => {
	const date = new Date(Number(timestamp))
	const diff = Date.now() - date.getTime();
	const _format = (number) => {
		return (number < 10 ? ('0' + number) : number);
	};
	const UNITS = {
		'年': 31557600000,
		'月': 2629800000,
		'天': 86400000,
		'小时': 3600000,
		'分钟': 60000,
		'秒': 1000
	}
	if (diff < UNITS['天']) {
		return _format(date.getHours()) + ':' + _format(date.getMinutes());
	}
	if (diff >= UNITS['天'] && diff < UNITS['天'] * 2) {
		return '昨天 ' + _format(date.getHours()) + ':' + _format(date.getMinutes());
	} else if (diff < UNITS['年']) {
		return (date.getMonth() + 1) + '月' + date.getDate() + '日';
	} else {
		return date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日';
	}
}
export const sleep = (value = 30) => {
	return new Promise((resolve) => {
		setTimeout(() => {
			resolve()
		}, value)
	})
}
export const getID = (id) => {
	const prefix = uni.$prefix
	return prefix ? id.replace(prefix, '') : id
}